package com.xyazm.order.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.xyazm.common.dao.BaseDAO;
import com.xyazm.order.domain.entity.AfterSaleItemDO;
import com.xyazm.order.mapper.AfterSaleItemMapper;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 订单售后条目表 DAO
 * @author xuyou
 * @date: 2022/6/29 14:48
 */
@Repository
public class AfterSaleItemDAO extends BaseDAO<AfterSaleItemMapper, AfterSaleItemDO> {

    /**
     * 根据orderId和skuCode查询售后单条目
     * 这里做成list便于以后扩展
     * 目前仅支持整笔条目的退货，所以当前list里只有一条
     * @author xuyou
     * @date: 2022/7/13 21:32
     */
    public List<AfterSaleItemDO> listByOrderIdAndSkuCode(String orderId, String skuCode) {
        LambdaQueryWrapper<AfterSaleItemDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(AfterSaleItemDO::getOrderId, orderId);
        queryWrapper.eq(AfterSaleItemDO::getSkuCode, skuCode);
        return list(queryWrapper);
    }

    /**
     * 根据订单号查询售后单条目
     * @author xuyou
     * @date: 2022/7/13 21:53
     */
    public List<AfterSaleItemDO> listByOrderId(String orderId) {
        LambdaQueryWrapper<AfterSaleItemDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(AfterSaleItemDO::getOrderId, orderId);
        return list(queryWrapper);
    }

    /**
     * 根据orderId和afterSaleId查询售后单条目
     * @author xuyou
     * 2022/7/20 0020 21:54
     * @param orderId
     * @param afterSaleId
    */
    public AfterSaleItemDO getByOrderIdAndAfterSaleId(String orderId, String afterSaleId) {
        LambdaQueryWrapper<AfterSaleItemDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(AfterSaleItemDO::getOrderId, orderId);
        queryWrapper.eq(AfterSaleItemDO::getAfterSaleId, afterSaleId);
        return getOne(queryWrapper);
    }

    /**
     * 根据售后单号查询售后单条目记录
     * @author xuyou
     * @date: 2022/7/21 16:49
     * @param: afterSaleId
     */
    public List<AfterSaleItemDO> listByAfterSaleId(String afterSaleId) {
        LambdaQueryWrapper<AfterSaleItemDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(AfterSaleItemDO::getAfterSaleId, afterSaleId);
        return list(queryWrapper);
    }

    /**
     * 查询出不包含当前afterSaleId的售后条目
     * @author xuyou
     * 2022/7/30 0030 12:03
     * @param orderId 订单号
     * @param afterSaleId 售后条目id
    */
    public List<AfterSaleItemDO> listNotContainCurrentAfterSaleId(String orderId, String afterSaleId) {
        LambdaQueryWrapper<AfterSaleItemDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(AfterSaleItemDO::getOrderId, orderId);
        queryWrapper.notIn(AfterSaleItemDO::getAfterSaleId, afterSaleId);
        return list(queryWrapper);
    }

    /**
     * 根据orderId、afterSaleId、skuCode查询售后订单条目
     */
    public AfterSaleItemDO getAfterSaleOrderItem(String orderId, String afterSaleId, String skuCode, Integer afterSaleItemType) {
        LambdaQueryWrapper<AfterSaleItemDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(AfterSaleItemDO::getOrderId, orderId);
        queryWrapper.eq(AfterSaleItemDO::getAfterSaleId, afterSaleId);
        queryWrapper.eq(AfterSaleItemDO::getSkuCode, skuCode);
        queryWrapper.eq(AfterSaleItemDO::getAfterSaleItemType, afterSaleItemType);
        return getOne(queryWrapper);
    }

    /**
     * 根据orderId和skuCode查询售后单条目
     */
    public List<AfterSaleItemDO> getOrderIdAndSkuCode(String orderId, String skuCode) {
        LambdaQueryWrapper<AfterSaleItemDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(AfterSaleItemDO::getOrderId, orderId);
        queryWrapper.eq(AfterSaleItemDO::getSkuCode, skuCode);
        return list(queryWrapper);
    }


    /**
     * 更新条目售后完成标记
     */
    public Boolean updateAfterSaleItemCompletionMark(String orderId, Integer mark) {
        LambdaUpdateWrapper<AfterSaleItemDO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(AfterSaleItemDO::getOrderId, orderId)
                .set(AfterSaleItemDO::getReturnCompletionMark, mark);
        return update(updateWrapper);
    }

    /**
     * 根据orderId查询指定订单中returnMark标记的售后条目
     */
    public List<AfterSaleItemDO> listReturnCompletionByOrderId(String orderId, Integer returnCompletionMark) {
        LambdaQueryWrapper<AfterSaleItemDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(AfterSaleItemDO::getOrderId, orderId);
        queryWrapper.eq(AfterSaleItemDO::getReturnCompletionMark, returnCompletionMark);
        return list(queryWrapper);
    }
}
